package com.xydtech.ecard.merchant.service.impl;

import com.xydtech.common.annotation.DataScope;
import com.xydtech.common.core.text.Convert;
import com.xydtech.common.utils.AESEncryptionUtils;
import com.xydtech.common.utils.DateUtils;
import com.xydtech.common.utils.StringUtils;
import com.xydtech.ecard.ecard.domain.EcardPriorCreditTransferRecord;
import com.xydtech.ecard.ecard.mapper.EcardPriorCreditTransferRecordMapper;
import com.xydtech.ecard.merchant.domain.EcardPriorCredit;
import com.xydtech.ecard.merchant.mapper.EcardPriorCreditMapper;
import com.xydtech.ecard.merchant.service.IEcardPriorCreditService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 电子名片预授信记录Service业务层处理
 *
 * @author yuzhiguo
 * @date 2024-05-21 下午3:05
 */
@Service
public class EcardPriorCreditServiceImpl implements IEcardPriorCreditService {

    @Autowired
    private EcardPriorCreditMapper ecardPriorCreditMapper;

    @Autowired
    private EcardPriorCreditTransferRecordMapper ecardPriorCreditTransferRecordMapper;

    /**
     * 查询电子名片预授信记录
     *
     * @param id 电子名片预授信记录主键
     * @return 电子名片预授信记录
     */
    @Override
    public EcardPriorCredit selectEcardPriorCreditById(Long id, String salt)
    {
        EcardPriorCredit priorCredit = ecardPriorCreditMapper.selectEcardPriorCreditById(id);
        if (priorCredit != null) {
            try {
                //数据解密（手机号、身份证号）
                if (!StringUtils.objIsNullOrEmpty(priorCredit.getPhone())) {
                    priorCredit.setPhone(AESEncryptionUtils.decrypt(priorCredit.getPhone(), salt));
                }
                if (!StringUtils.objIsNullOrEmpty(priorCredit.getCardNum())) {
                    priorCredit.setCardNum(AESEncryptionUtils.decrypt(priorCredit.getCardNum(), salt));
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        return priorCredit;
    }

    /**
     * 查询电子名片预授信记录列表
     *
     * @param ecardPriorCredit 电子名片预授信记录
     * @return 电子名片预授信记录
     */
    @Override
    @DataScope(deptAlias = "d", userAlias = "u")
    public List<EcardPriorCredit> selectEcardPriorCreditList(EcardPriorCredit ecardPriorCredit, String salt)
    {
        try {
            //数据加密（手机号、身份证号）
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCredit.getPhone())) {
                ecardPriorCredit.setPhone(AESEncryptionUtils.encrypt(ecardPriorCredit.getPhone(), salt));
            }
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCredit.getCardNum())) {
                ecardPriorCredit.setCardNum(AESEncryptionUtils.encrypt(ecardPriorCredit.getCardNum(), salt));
            }
            List<EcardPriorCredit> priorCreditList = ecardPriorCreditMapper.selectEcardPriorCreditList(ecardPriorCredit);
            if (priorCreditList.size() > 0) {
                for (EcardPriorCredit priorCredit : priorCreditList) {
                    //数据解密（手机号、身份证号）
                    if (!StringUtils.objIsNullOrEmpty(priorCredit.getPhone())) {
                        priorCredit.setPhone(AESEncryptionUtils.decrypt(priorCredit.getPhone(), salt));
                    }
                    if (!StringUtils.objIsNullOrEmpty(priorCredit.getCardNum())) {
                        priorCredit.setCardNum(AESEncryptionUtils.decrypt(priorCredit.getCardNum(), salt));
                    }
                }
            }
            return priorCreditList;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 新增电子名片预授信记录
     *
     * @param ecardPriorCredit 电子名片预授信记录
     * @return 结果
     */
    @Override
    public int insertEcardPriorCredit(EcardPriorCredit ecardPriorCredit, String salt)
    {
        ecardPriorCredit.setCreateTime(DateUtils.getNowDate());
        try {
            //数据加密（手机号、身份证号）
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCredit.getPhone())) {
                ecardPriorCredit.setPhone(AESEncryptionUtils.encrypt(ecardPriorCredit.getPhone(), salt));
            }
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCredit.getCardNum())) {
                ecardPriorCredit.setCardNum(AESEncryptionUtils.encrypt(ecardPriorCredit.getCardNum(), salt));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return ecardPriorCreditMapper.insertEcardPriorCredit(ecardPriorCredit);
    }

    /**
     * 修改电子名片预授信记录
     *
     * @param ecardPriorCredit 电子名片预授信记录
     * @return 结果
     */
    @Override
    public int updateEcardPriorCredit(EcardPriorCredit ecardPriorCredit, String salt)
    {
        try {
            //数据加密（手机号、身份证号）
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCredit.getPhone())) {
                ecardPriorCredit.setPhone(AESEncryptionUtils.encrypt(ecardPriorCredit.getPhone(), salt));
            }
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCredit.getCardNum())) {
                ecardPriorCredit.setCardNum(AESEncryptionUtils.encrypt(ecardPriorCredit.getCardNum(), salt));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return ecardPriorCreditMapper.updateEcardPriorCredit(ecardPriorCredit);
    }

    /**
     * 批量删除电子名片预授信记录
     *
     * @param ids 需要删除的电子名片预授信记录主键
     * @return 结果
     */
    @Override
    public int deleteEcardPriorCreditByIds(String ids)
    {
        return ecardPriorCreditMapper.deleteEcardPriorCreditByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除电子名片预授信记录信息
     *
     * @param id 电子名片预授信记录主键
     * @return 结果
     */
    @Override
    public int deleteEcardPriorCreditById(Long id)
    {
        return ecardPriorCreditMapper.deleteEcardPriorCreditById(id);
    }

    /**
     * 预授信转交客户经理
     * @param ecardPriorCreditList
     * @param userId
     * @return
     */
    @Override
    public int priorAllocation(List<EcardPriorCredit> ecardPriorCreditList, Long userId) {
        //预授信转交记录
        List<EcardPriorCreditTransferRecord> ecardPriorCreditTransferRecordList = new ArrayList<>();

        for(int i = 0; i < ecardPriorCreditList.size(); i++){
            EcardPriorCredit ecardPriorCredit = ecardPriorCreditList.get(i);
            //查询预授信信息
            EcardPriorCredit oldEcardPriorCredit = ecardPriorCreditMapper.selectEcardPriorCreditById(ecardPriorCredit.getId());

            EcardPriorCreditTransferRecord ecardPriorCreditTransferRecord = new EcardPriorCreditTransferRecord();
            ecardPriorCreditTransferRecord.setPriorCreditId(ecardPriorCredit.getId());
            ecardPriorCreditTransferRecord.setTransferId(oldEcardPriorCredit.getUserId());
            ecardPriorCreditTransferRecord.setTransferDeptId(oldEcardPriorCredit.getDeptId());
            ecardPriorCreditTransferRecord.setRecipientId(ecardPriorCredit.getUserId());
            ecardPriorCreditTransferRecord.setRecipientDeptId(ecardPriorCredit.getDeptId());
            ecardPriorCreditTransferRecordList.add(ecardPriorCreditTransferRecord);
        }


        //批量移交预授信信息
        int a = ecardPriorCreditMapper.batchUpdateEcardPriorCredit(ecardPriorCreditList);
        //批量插入预授信信息移交记录
        int b = ecardPriorCreditTransferRecordMapper.batchInsertEcardPriorCreditTransferRecord(ecardPriorCreditTransferRecordList);

        return a > b ? b:a;
    }
}
